#!/usr/bin/env python3
# Created by han on 2016/7/4
import socket, sys, os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from module import public

class myclient:
    def __init__(self, ip, port, name):
        self.ip = ip
        self.port = port
        self.name = name

    def cmd(self):
        ip_port = (self.ip, self.port)
        sk = socket.socket()
        sk.connect(ip_port)
        recv_data = sk.recv(1024)
        print(recv_data.decode())
        while True:
            cmd_data = input(">>: ").strip() #格式化命令数据
            if not cmd_data:      #如果输入命令为空，则重新输入
                continue
            if cmd_data == "exit":  #如果命令为exit 为退出，终端本次通话
                break
            if not cmd_data.startswith("put") and not cmd_data.startswith("get"):
                self.client_shell(sk, cmd_data)


                # sk.sendall(bytes(cmd_data, "utf8"))   #正常就传送命令数据
                # ready_data = sk.recv(1024)            #然后接受准备数据
                # raw_data = ready_data.decode()        #解码准备接收数据
                # # print(raw_data)
                # if raw_data.startswith("ready"):      #如果这个数据开头是ready开始的
                #     raw_len = int(raw_data.split("|")[-1]) #则获取长度
                #     # print("len======",raw_len,type(raw_len))
                #     client_ready = bytes("start","utf8")  #准备开始数据
                #     sk.sendall(client_ready)              #发送可以接受数据的信号
                #     data_len = 0                           #初始化长度
                #     data = b""                             #初始化数据
                #     while data_len < raw_len:
                #         recv_data = sk.recv(1024)          #循环接受数据
                #         data_len+=len(recv_data)           #循环增加数据长度
                #         data+=recv_data                    #循环将数据相加
                #         print("all_len : %d,local_len : %d"% (raw_len, data_len))
                    print(data.decode())
                else:
                    error_data = sk.recv(1024)
                    print(error_data.decode())
            else:
                cmd_list = cmd_data.split()
                if len(cmd_list) < 2:
                    msg = "type error"
                    public.color_msg(31, msg, 40)
                    continue
                task_type = cmd_list[0]


        sk.close()

    def client_shell(self, socket_obj, cmd_data):
        socket_obj.sendall(bytes(cmd_data, "utf8"))  # 正常就传送命令数据
        ready_data = socket_obj.recv(1024)  # 然后接受准备数据
        raw_data = ready_data.decode()  # 解码准备接收数据
        # print(raw_data)
        if raw_data.startswith("ready"):  # 如果这个数据开头是ready开始的
            raw_len = int(raw_data.split("|")[-1])  # 则获取长度
            # print("len======",raw_len,type(raw_len))
            client_ready = bytes("start", "utf8")  # 准备开始数据
            socket_obj.sendall(client_ready)  # 发送可以接受数据的信号
            data_len = 0  # 初始化长度
            data = b""  # 初始化数据
            while data_len < raw_len:
                recv_data = socket_obj.recv(1024)  # 循环接受数据
                data_len += len(recv_data)  # 循环增加数据长度
                data += recv_data  # 循环将数据相加
                print("all_len : %d,local_len : %d" % (raw_len, data_len))
            return data 